package com.podium.web.system.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.podium.comment.annotate.OperateLog;
import com.podium.comment.annotate.PermAuth;
import com.podium.comment.AjaxResult;
import com.podium.comment.constant.OperateLogType;
import com.podium.web.system.entity.SysMenu;
import com.podium.web.system.service.SysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author 邵文泽
 * @description 系统菜单
 * @date Tue Apr 29 09:58:56 CST 2025
 */
@RestController
@RequestMapping("/system/menu")
public class SysMenuController {

    @Autowired
    private SysMenuService sysMenuService;

    /**
     * 分页获取系统菜单信息
     *
     * @param sysMenu 查询系统菜单信息条件
     */
    @PermAuth("system:menu:list")
    @GetMapping("page")
    public AjaxResult<IPage<SysMenu>> getPage(@RequestParam(defaultValue = "1") int pageNum,
                                                   @RequestParam(defaultValue = "10") int pageSize,
                                                   SysMenu sysMenu
                                                     ) {
        Page<SysMenu> page = new Page<>(pageNum, pageSize);
        return new AjaxResult<IPage<SysMenu>>().success(sysMenuService.page(page, sysMenu));
    }

    /**
     * 获取系统菜单信息列表
     *
     * @param sysMenu 查询系统菜单信息条件
     */
    @PermAuth("system:menu:list")
    @GetMapping("list")
    public AjaxResult<List<SysMenu>> getList(SysMenu sysMenu) {
        return new AjaxResult<List<SysMenu>>().success(sysMenuService.list(sysMenu));
    }

    /**
     * 获取系统菜单信息树形列表
     *
     * @param sysMenu 查询系统菜单信息条件
     */
    @PermAuth("system:menu:list")
    @GetMapping("treeList")
    public AjaxResult<List<SysMenu>> treeList(SysMenu sysMenu) {
        return new AjaxResult<List<SysMenu>>().success(sysMenuService.treeList(sysMenu));
    }

    /**
     * 根据ID获取系统菜单信息
     */
    @GetMapping("{id}")
    public AjaxResult<SysMenu> getByInfo(@PathVariable Long id) {
        return new AjaxResult<SysMenu>().success(sysMenuService.getById(id));
    }

    /**
     * 添加系统菜单信息
     *
     * @param sysMenu 系统菜单信息
     */
    @OperateLog(title = "系统管理-菜单管理", businessType = OperateLogType.ADD)
    @PermAuth("system:menu:add")
    @PostMapping("/save")
    public AjaxResult<Void> save(@RequestBody SysMenu sysMenu) {
        boolean row = sysMenuService.save(sysMenu);
        return row ? new AjaxResult<Void>().success() : new AjaxResult<Void>().error();
    }

    /**
     * 更新系统菜单信息
     *
     * @param sysMenu 系统菜单信息
     */
    @OperateLog(title = "系统管理-菜单管理", businessType = OperateLogType.EDIT)
    @PermAuth("system:menu:edit")
    @PostMapping("/update")
    public AjaxResult<Void> update(@RequestBody SysMenu sysMenu) {
        boolean row = sysMenuService.updateById(sysMenu);
        return row ? new AjaxResult<Void>().success() : new AjaxResult<Void>().error();
    }

    /**
     * 删除系统菜单信息
     *
     * @param ids 系统菜单信息ID集合
     */
    @OperateLog(title = "系统管理-菜单管理", businessType = OperateLogType.DELETE)
    @PermAuth("system:menu:delete")
    @GetMapping("/remove/{ids}")
    public AjaxResult<Void> remove(@PathVariable Long[] ids) {
        if (ids == null || ids.length == 0) {
            return new AjaxResult<Void>().error("没有要删除的数据！");
        }
        for (Long id : ids) {
            sysMenuService.removeById(id);
        }
        return new AjaxResult<Void>().success();
    }

}